#!/usr/bin/env node

/**
 * 完整开发环境启动脚本
 * 同时启动前端开发服务器和测试后端服务器
 */

import { spawn } from 'child_process'
import { fileURLToPath } from 'url'
import { dirname, join } from 'path'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const projectRoot = join(__dirname, '..')

console.log('🚀 启动洗护服务商户端完整开发环境')
console.log('=' .repeat(50))

// 启动测试后端服务器
console.log('📡 启动测试后端服务器 (端口: 8080)...')
const backend = spawn('node', ['backend-test-server.js'], {
  cwd: projectRoot,
  stdio: 'pipe',
  shell: true
})

backend.stdout.on('data', (data) => {
  console.log(`[后端] ${data.toString().trim()}`)
})

backend.stderr.on('data', (data) => {
  console.error(`[后端错误] ${data.toString().trim()}`)
})

// 等待后端启动
setTimeout(() => {
  // 启动前端开发服务器
  console.log('🎨 启动前端开发服务器 (端口: 5173)...')
  const frontend = spawn('npm', ['run', 'dev'], {
    cwd: projectRoot,
    stdio: 'pipe',
    shell: true
  })

  frontend.stdout.on('data', (data) => {
    console.log(`[前端] ${data.toString().trim()}`)
  })

  frontend.stderr.on('data', (data) => {
    console.error(`[前端错误] ${data.toString().trim()}`)
  })

  frontend.on('close', (code) => {
    console.log(`[前端] 进程退出，退出码: ${code}`)
    // 前端退出时也关闭后端
    backend.kill()
    process.exit(code)
  })
}, 2000)

backend.on('close', (code) => {
  console.log(`[后端] 进程退出，退出码: ${code}`)
})

// 优雅关闭处理
process.on('SIGINT', () => {
  console.log('\n🛑 收到中断信号，正在关闭服务...')
  backend.kill()
  process.exit(0)
})

process.on('SIGTERM', () => {
  console.log('\n🛑 收到终止信号，正在关闭服务...')
  backend.kill()
  process.exit(0)
})

// 显示启动信息
setTimeout(() => {
  console.log('\n' + '='.repeat(50))
  console.log('🎉 开发环境启动完成！')
  console.log('')
  console.log('📍 服务地址:')
  console.log('  前端应用: http://localhost:5173')
  console.log('  后端API: http://localhost:8080')
  console.log('  健康检查: http://localhost:8080/api/health')
  console.log('')
  console.log('🔑 测试账号:')
  console.log('  用户名: admin')
  console.log('  密码: 123456')
  console.log('')
  console.log('💡 提示:')
  console.log('  - 前端支持热重载，修改代码会自动刷新')
  console.log('  - 后端提供基础API接口用于测试')
  console.log('  - 按 Ctrl+C 停止所有服务')
  console.log('=' .repeat(50))
}, 5000)
